package dominio;

import java.io.Serializable;

import org.uqbar.commons.utils.Observable;

import exceptions.SaldoInsuficiente;

@Observable
public class Usuario implements Serializable{

	private int puntos = 500;
	private JardinZen jardinZen = new JardinZen();

	public void agregarPlantaZen(Planta planta) {
		this.jardinZen.agregarPlanta(planta,true);
	}
	
	public void agregarPlantaZen(Planta planta, boolean forceFire) {
		this.jardinZen.agregarPlanta(planta,forceFire);
	}
	
	public void setPuntos(int puntos) {
		this.puntos = puntos;
	}

	/**
	 * Si el saldo es suficiente, resta el credito en el usuario
	 * y mejora la planta seleccionada, sino avisa con Exception
	 * @param plantaAMejorar..
	 * @param mejora.. a comprar
	 * @throws SaldoInsuficiente cuando la mejora excede los puntos
	 */
	public void mejorarPlanta(Planta plantaAMejorar, Mejora mejora) {
		// Si alcanzan los puntos para comprar la mejora, comprarla
		if(mejora.getPrecio() <= this.getPuntos()) {
			this.restarPuntos(mejora.getPrecio());
			plantaAMejorar.mejorar(mejora,false);	
			System.out.println("Planta mejorada");
		} else {
			throw new SaldoInsuficiente();
		}
		
	}

	public void sumarPuntos(int puntos) {
		this.puntos += puntos;
	}
	
	public void restarPuntos(int puntos) {
		this.puntos -= puntos;
	}

	public int getPuntos() {
		return this.puntos;
	}
	
	public JardinZen getJardinZen() {
		return this.jardinZen;
	}
}
